import { post } from '@/utils/request'

// 用户登录请求参数接口
export interface LoginRequest {
  username?: string
  email?: string
  phone?: string
  password: string
}

// 用户注册请求参数接口
export interface RegisterRequest {
  username: string
  password: string
  email: string
  phoneNumber: string
  sex: number
  verificationCode: string
}

// 发送注册验证码请求参数接口
export interface SendRegisterVerificationCodeRequest {
  email: string
}

// 发送修改密码验证码请求参数接口
export interface SendUpdateVerificationCodeRequest {
  email: string
}

// 用户修改密码请求参数接口
export interface UpdatePasswordRequest {
  phoneNumber: string
  email: string
  newPassword: string
  verificationCode: string
}

// 用户信息接口
export interface UserInfo {
  userName: string
  headshot: string
  phoneNumber: string
  email: string
  realName: string
  sex: number
  passwordComplexity: number | null // 用户密码强度，没有则为3最低
  token: string
}

// 通知配置项接口
export interface NotificationPreferenceItem {
  id: number
  noticeTypeName: string
  noticeTypeDesc: string
  userPreference: number
}

// 更新通知配置请求参数接口
export interface UpdateNotificationPreferenceRequest {
  id: number
  userPreference: number
}

// 通知标签接口
export interface NoticeTag {
  tagName: string
  tagStyle: string
}

// 通知项接口
export interface NoticeItem {
  id: number
  noticeTypeId: number
  noticeTypeName: string
  noticeTitle: string
  noticeContent: string
  noticeTags: NoticeTag[]
  status: number // 0-未读 1-已读
  createTime: number
}

// 通知分页查询请求参数接口
export interface NoticePageRequest {
  noticeTypeId?: number
  status?: number
  startTime?: number
  endTime?: number
  page: {
    page: number
    limit: number
    order?: 'ASC' | 'DESC'
    field?: string
  }
}

// 分页响应接口
export interface PageResponse<T> {
  pageNo: number
  pageSize: number
  totalCount: number
  totalPage: number
  data: T[]
}

// 用户登录
export const login = (params: LoginRequest) => {
  return post<UserInfo>('/user-api/user/login', params)
}

// 用户注册
export const register = (params: RegisterRequest) => {
  return post<boolean>('/user-api/user/register', params)
}

// 发送注册验证码
export const sendRegisterVerificationCode = (params: SendRegisterVerificationCodeRequest) => {
  return post<boolean>('/user-api/user/sendRegisterVerificationCode', params)
}

// 发送修改密码验证码
export const sendUpdateVerificationCode = (params: SendUpdateVerificationCodeRequest) => {
  return post<boolean>('/user-api/user/sendUpdateVerificationCode', params)
}

// 用户修改密码
export const updatePassword = (params: UpdatePasswordRequest) => {
  return post<boolean>('/user-api/user/update', params)
}

// 获取用户通知配置
export const getNotificationPreference = () => {
  return post<NotificationPreferenceItem[]>('/user-api/user/notice/preference')
}

// 更新用户通知配置
export const updateNotificationPreference = (params: UpdateNotificationPreferenceRequest) => {
  return post<boolean>('/user-api/user/notice/preference/update', params)
}

// 获取用户通知分页
export const getNoticeList = (params: NoticePageRequest) => {
  return post<PageResponse<NoticeItem>>('/user-api/user/notice/page', params)
}

// 批量删除用户通知请求参数接口
export interface BatchDeleteNoticeRequest {
  ids: number[]
}

// 批量更新通知状态请求参数接口
export interface BatchUpdateNoticeStatusRequest {
  ids: number[]
}

// 批量删除用户通知
export const batchDeleteNotice = (params: BatchDeleteNoticeRequest) => {
  return post<boolean>('/user-api/user/notice/del', params)
}

// 批量更新用户通知状态（标记为已读）
export const batchUpdateNoticeStatus = (params: BatchUpdateNoticeStatusRequest) => {
  return post<boolean>('/user-api/user/notice/status', params)
}

// 登录设备信息接口
export interface LoginDevice {
  operatingSystem: string
  osVersion: string
  browser: string
  browserVersion: string
  deviceType: string
}

// 登录记录项接口
export interface LoginRecord {
  id: number
  userId: number
  loginTime: number
  loginIp: string
  loginLocation: string
  loginDevice: LoginDevice
  loginStatus: number // 0-失败 1-成功
}

// 登录记录分页查询请求参数接口
export interface LoginRecordPageRequest {
  page: {
    page: number
    limit: number
    order?: 'ASC' | 'DESC'
    field?: string
  }
}

// 获取用户登录记录分页
export const getUserLoginRecords = (params: LoginRecordPageRequest) => {
  return post<PageResponse<LoginRecord>>('/user-api/user/pageUserLoginRecord', params)
}
